/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import databaseHandling.LagerHandler;
import databaseHandling.SalgsHandler;
import interfaces.BrugerInterface;
import interfaces.ConnectionInterface;
import interfaces.Lager_VareInterface;
import interfaces.ObserverListenerInterface;
import interfaces.SalgInterface;
import interfaces.VareGruppeInterface;
import interfaces.VareInterface;
import interfaces.VareSalgInterface;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Lunde
 */
public class Connection extends UnicastRemoteObject implements ConnectionInterface {

    private BrugerInterface bruger;
    private SalgInterface aktivSalg;
    private ObserverListenerInterface observerListener;

    public Connection(BrugerInterface bruger) throws RemoteException, SQLException {
        this.bruger = bruger;
        System.out.println(bruger.getBrugernavn());
        aktivSalg = hentAktivtSalg();
    }

    @Override
    public BrugerInterface getBruger() throws RemoteException {
        return bruger;
    }

    public SalgInterface getAktivSalg() throws RemoteException {
        return aktivSalg;
    }

    @Override
    public ArrayList<VareInterface> getAlleVarer() throws RemoteException, SQLException {
        return LagerHandler.getAlleVarer();
    }

    @Override
    public ArrayList<Lager_VareInterface> hentLagerVarerTilknyttetBruger() throws RemoteException, SQLException {
        ArrayList<Lager_VareInterface> lagerVarer = LagerHandler.hentLagerTilknyttetBruger((Bruger) bruger);
        return lagerVarer;
    }

    @Override
    public ArrayList<VareGruppeInterface> hentAlleVaregrupper() throws RemoteException, SQLException {
        return LagerHandler.hentAlleVareGrupper();
    }

    /**
     * Henter aktivt salg hvis det eksisterer ellers opretter den en ny på
     * databasen og returnere dette.
     */
    private SalgInterface hentAktivtSalg() throws RemoteException, SQLException {
        SalgInterface salg;
        if (SalgsHandler.getAktivtSalg(bruger.getId()) == null) {
            opretSalg();
        }
        salg = SalgsHandler.getAktivtSalg(bruger.getId());
        return salg;
    }

    private void opretSalg() throws RemoteException, SQLException {
        SalgsHandler.opretSalg(bruger.getId());
    }

    @Override
    public void annullerSalg() throws RemoteException, SQLException {
        SalgsHandler.annullerSalg(aktivSalg);
        aktivSalg = hentAktivtSalg();
    }

    @Override
    public void gennemførSalg() throws RemoteException, SQLException {
        SalgsHandler.gennemfoerSalg(aktivSalg);
        hentAktivtSalg();
    }

    @Override
    public void setObserverListener(ObserverListenerInterface oli) throws RemoteException {
        this.observerListener = oli;
    }

    @Override
    public ObserverListenerInterface getObserverListener() throws RemoteException {
        return observerListener;
    }

}
